Computer systems typically include peripheral busses that are capable of coupling a variety of peripheral devices to the system. Some of these peripheral devices may include keyboards, audio components, printers, scanners, storage devices, pointer devices, etc. One peripheral bus commonly found in today's computer systems is the Universal Serial Bus (USB).
In an effort to reduce power consumption, typical computer systems employ a combination of software and hardware techniques based on the Advanced Configuration and Power Interface Specification (ACPI), Revision 2.0b. The ACPI specification describes the structures and mechanisms necessary to design operating system-directed power management and make advanced configuration architectures possible. ACPI defines power management levels ranging from a C0 state (maximum power consumption) to a C4 state (minimum power consumption).
In prior computer systems implementing version 1.1 of USB, a USB host controller reads from the computer system's main memory every 1 ms to learn what the USB host controller must do during the next USB frame, even if it finds that it has nothing to do. For prior computer systems implementing version 2.0 of USB, the host controller reads from system memory every 125 us to learn what it must do during the next USB microframe, again even if it finds that it has nothing to do.
Microsoft® Windows® operating systems are commonly found in today's computer systems. Windows operating systems prior to the XP version keep USB host controllers always enabled whenever a USB peripheral device is attached so that the USB host controller can perform the afore-mentioned periodic reads from system memory. Windows XP keeps the host controller enabled when any USB device is attached, unless the device is in a suspended state and complies with USB device hardware and software requirements necessary for using the Windows XP “USB Selective Suspend” protocol.
Current computer systems compliant with the ACPI specification include logic devices that contain an ACPI bus master status bit (BM_STS). Prior system logic devices keep the BM_STS bit “pegged” (always returns “true” whenever the operating system reads it) while any USB host controller is enabled. Whenever the operating system attempts to enter either a C3 state or a C4 state, the operating system reads the BM_STS bit, and enters a C3 state or a C4 state if the BM_STS bit is false, but chooses to enter a C2 state if the BM_STS bit is true. Therefore, because the BM_STS is pegged when any USB device is attached, the operating system cannot enter the C3 or C4 state, and instead must enter the C2 state, which limits the amount of power savings possible.